/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jsysacc.asistencia.model.logic.maestros;

import com.cerd.util.BaseSP01.JUtilBaseSP01;
import com.jsysacc.asistencia.model.beans.maestros.Horario;
import com.jsysacc.asistencia.model.beans.maestros.MovimientoAsistencia;
import com.jsysacc.asistencia.model.beans.maestros.Personal;
import com.jsysacc.asistencia.model.dao.design.maestros.IDiaFeriadoDAO;
import com.jsysacc.asistencia.model.dao.design.maestros.IMovimientoAsistenciaDAO;
import com.jsysacc.asistencia.model.dao.design.maestros.IPersonalDAO;
import com.jsysacc.asistencia.model.dao.factory.MainDAOFactory;
import java.sql.SQLException;
import java.util.ArrayList;
import org.joda.time.DateTime;

/**
 *
 * @author Carlos
 */
public class MovimientoAsistencialLogic extends JUtilBaseSP01 {

    IMovimientoAsistenciaDAO movimientoAsistenciaDAO = MainDAOFactory.getInstance().getMovimientoAsistenciaDAO();
    IPersonalDAO personalDAO = MainDAOFactory.getInstance().getPersonalDAO();
    IDiaFeriadoDAO diaferiadoDAO = MainDAOFactory.getInstance().getDiaFeriadoDAO();

    public MovimientoAsistencialLogic() {
    }

    public ArrayList<MovimientoAsistencia> getAll() throws Exception {
        return movimientoAsistenciaDAO.getAll();
    }

    public ArrayList<MovimientoAsistencia> getByCriterio(String criterio, String valor) throws Exception {
        return movimientoAsistenciaDAO.getByCriterio(criterio, valor);
    }

    public MovimientoAsistencia getByPk(DateTime fecha, String num_ide) throws Exception {
        return movimientoAsistenciaDAO.getByPk(fecha, num_ide);
    }

    public boolean delete(DateTime fecha, String num_ide) throws Exception {
        return movimientoAsistenciaDAO.delete(fecha, num_ide);
    }

    public boolean insert(MovimientoAsistencia entity) throws Exception {
        return movimientoAsistenciaDAO.insert(entity);
    }

    public boolean update(MovimientoAsistencia entity) throws Exception {
        return movimientoAsistenciaDAO.update(entity);
    }

    public boolean existePersonalByNum_ide(String num_ide) throws Exception {
        return personalDAO.existeByNum_ide(num_ide);
    }

    public boolean getExisteDiaFeriado(DateTime fecha) throws Exception {
        return diaferiadoDAO.getExisteDiaFeriado(fecha);
    }

    public String registrarAsistenciaIngresoMan(DateTime fecha, String num_ide, String usu_reg) throws Exception {
        MovimientoAsistencia oMovimientoAsistencia = null;
        //SACAMOS EL PERSONAL
        Personal oPersonal = personalDAO.getByNum_ide(num_ide);
        if (_vacio(oPersonal)) {
            return "NO EXISTE PERSONAL";
        }
        HorarioLogic horarioLogic = new HorarioLogic();

        Horario oHorario = horarioLogic.getByPk(oPersonal.getCod_hor());

        if (_vacio(oHorario)) {
            return "NO EXISTE HORARIO RELACIONADO CON EL TRABAJADOR";
        }

        String cod_tip_asi = "TA001";
        String swt_cor = "";
        DateTime fec_nor = null;
        DateTime fec_tol = null;
        int min_tar = 0;
        //VERIFICAMOS SI ES SABADO
//        if (fecha.getDayOfWeek() == 6) {
            //
            String[] hor_man = oHorario.getHor_ini_man_sab().split(":");
            fec_nor = new DateTime(fecha.getYear(), fecha.getMonthOfYear(), fecha.getDayOfMonth(), toInt(hor_man[0]), toInt(hor_man[1]));
            fec_tol = new DateTime(fecha.getYear(), fecha.getMonthOfYear(), fecha.getDayOfMonth(), toInt(hor_man[0]), toInt(hor_man[1]) + toInt(oHorario.getTol_man_sab()));

            if (fecha.isAfter(fec_tol)) {
                cod_tip_asi = "TA002";
            }

            if (_equiv(oHorario.getHor_cor_sab(), "S")) {
                swt_cor = "S";
            }

            min_tar = fecha.getMinuteOfDay()- fec_tol.getMinuteOfDay();
            if (min_tar < 0) {
                min_tar = 0;
            }
            
            String hor_ing_man ="";
            
            hor_ing_man = PADL(toString(fecha.getHourOfDay()), 2, '0') + ":" + PADL(toString(fecha.getMinuteOfHour()), 2, '0')+ ":"+ PADL(toString(fecha.getSecondOfMinute()), 2, '0');
            
            
            oMovimientoAsistencia = new MovimientoAsistencia();
            oMovimientoAsistencia.setNum_ide(num_ide);
            oMovimientoAsistencia.setFecha(fecha);
            oMovimientoAsistencia.setCod_hor(oHorario.getCod_hor());
            oMovimientoAsistencia.setCod_tip_asis(cod_tip_asi);
            oMovimientoAsistencia.setSwt_cor(swt_cor);
            oMovimientoAsistencia.setDescrip_hor(oHorario.toStringFull());
            oMovimientoAsistencia.setHor_ing_man_rea(hor_ing_man);
            oMovimientoAsistencia.setHor_ing_man(hor_ing_man);
            oMovimientoAsistencia.setMin_tar_man(min_tar);
            oMovimientoAsistencia.setMin_tar_tar(0);
            oMovimientoAsistencia.setUsu_reg(usu_reg);
            
            movimientoAsistenciaDAO.insert(oMovimientoAsistencia);

//        } else {
//
//        }

        return "OK";
    }
}
